//给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。 
//
// 如果反转后整数超过 32 位的有符号整数的范围 [−2³¹, 231 − 1] ，就返回 0。 
//假设环境不允许存储 64 位整数（有符号或无符号）。
//
// 
//
// 示例 1： 
//
// 
//输入：x = 123
//输出：321
// 
//
// 示例 2： 
//
// 
//输入：x = -123
//输出：-321
// 
//
// 示例 3： 
//
// 
//输入：x = 120
//输出：21
// 
//
// 示例 4： 
//
// 
//输入：x = 0
//输出：0
// 
//
// 
//
// 提示： 
//
// 
// -2³¹ <= x <= 2³¹ - 1 
// 
//
// Related Topics 数学 👍 4117 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-09-22 23:19:45
 * @description 7.整数反转
 */
public class ReverseInteger{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 ReverseInteger fun=new ReverseInteger();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int reverse(int x) {
		int rev = 0;
		while (x != 0) {
			//每次循环取出原数的最后一位
			int pop = x % 10;
			//将原数除以10去掉最后一位
			x /= 10;
			//对于正数（检查 7）：
			//Integer.MAX_VALUE = 2,147,483,647
			//Integer.MAX_VALUE / 10 = 214,748,364
			//如果 rev > 214,748,364，那么 rev * 10 至少是 2,147,483,650，已经超过最大值
			//如果 rev == 214,748,364，那么：
			//rev * 10 = 2,147,483,640
			//加上 pop 后：2,147,483,640 + pop
			//由于最大值的个位数是 7，所以当 pop > 7 时就会溢出
			//对于负数（检查 -8）：
			//Integer.MIN_VALUE = -2,147,483,648
			//Integer.MIN_VALUE / 10 = -214,748,364
			//如果 rev < -214,748,364，那么 rev * 10 已经小于最小值
			//如果 rev == -214,748,364，那么：
			//rev * 10 = -2,147,483,640
			//加上 pop 后：-2,147,483,640 + pop
			//由于最小值的个位数是 -8，所以当 pop < -8 时就会溢出
			if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
			if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
			rev = rev * 10 + pop;
		}
		return rev;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
